for
for var in list
do
command
done
list는 default로 아래 값들을 필드 구분자(internal field separator)로 사용한다.
- 빈 칸(space)
- 탭(tab)
- 줄바꿈(new line)
IFS는 환경 변수 값을 바꿈으로서 일시적으로 변경할 수 있다.
IFS.ORIG=$IFS
IFS=$'\n'
IFS=:
IFS=$'\n':;\"
와일드 카드를 이용한 for 문
for file in $HOME/*
do
if [ -d "$file" ]; then
echo "$file is a directory"
elif [ -f "$file" ]; then
echo "$file is a file"
fi
done
C style for loop
for (( i=1; i<=10; ++i)); do
echo $i
done
표준 bash 쉘과 달리
1. 변수값 할당 시, 빈 칸을 포함할 수 있다.
2. 조건문에 잇는 변수 앞에 달러 기호를 사용하지 않는다.
3. 반복 프로세스의 수식에 expr 명령 형식 사용하지 않음
variable assignment와 iteration process는 여러 개를 수행할 수 있다.
while테스트 명령이 종료 상태 0을 되돌려 주는 동안에는 일련의 명령을 되풀이함
while test command
do
commands
done
while [ command ]; do
commands
done
untilwhile와 반대로 0이 아닌 종료 상태를 만들어내는 명령어인 경우 루프에 들어 있는 명령을 되풀이함
종료 상태 0을 되돌려주면 루프를 중단
until test commands
do
commands
done
/etc/passwd 처리
IFS.Old=$IFS
IFS=$'\n'
for entry in $(cat /etc/passwd); do
echo "Values in $entry -"
IFS=:
for value in $entry; do
echo " $value"
done
done
break & continuebreak: 자동으로 가장 안쪽의 루프를 종료시킨다.
break에 매개변수를 전달해서 탈출할 루프의 단계를 전달할 수 있다.
default 1을 전달(1 단계의 루프만 탈출)
continue에 매개변수를 전달해서 속개할 루프의 수준(레벨)을 전달 할 수 있다.
default 1을 전달(1 단계의 루프문에서 속개)
반복문 출력 제어반복문이 종료되는 done에 리다이렉트(>)와 파이프( | )를 적용해서
반복문 출력값을 제어할 수 있다.
input="user.csv"
while IFS=',' read -r userid name; do
echo "adding $userid"
useradd -c "$name" -m $userid"
done < "$input"